package com.zixuan.gulicollege.eduservice.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zixuan.gulicollege.entity.eduservice.EduCourse;
import com.zixuan.gulicollege.entity.eduservice.vo.CourseFrontVO;
import com.zixuan.gulicollege.entity.eduservice.vo.CourseInfoVO;
import com.zixuan.gulicollege.entity.eduservice.vo.CourseInitFrontVO;
import com.zixuan.gulicollege.entity.eduservice.vo.CoursePublishVO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 课程 服务类
 * </p>
 *
 * @author zixuan
 * @since 2021-05-08
 */
@SuppressWarnings("AlibabaAbstractMethodOrInterfaceMethodMustUseJavadoc")
public interface EduCourseService extends IService<EduCourse> {

    /**
     * 添加课程基本信息
     * @param courseInfoVO
     * @return
     */
    String saveCourseInfo(CourseInfoVO courseInfoVO);

    /**
     * 根据id查询课程基本信息
     * @param courseId
     * @return
     */
    CourseInfoVO getCourseInfo(String courseId);

    /**
     * 修改课程信息
     * @param courseInfoVO
     * @return
     */
    int updateCourseInfo(CourseInfoVO courseInfoVO);

    /**
     * 根据课程id查询课程确认信息
     * @param id id值
     * @return CoursePublishVO对象
     */
    @SuppressWarnings("AlibabaAbstractMethodOrInterfaceMethodMustUseJavadoc")
    CoursePublishVO publishCourseInfo(String id);

    /**
     * 课程信息分类
     * @param current
     * @param limit
     * @return
     */
    Map<String, Object> pageListCourse(Integer current, Integer limit);

    /**
     * 按条件查询课程信息
     * @param current 当前页
     * @param limit 每条记录数
     * @param coursePublishVO 封装对象
     */
    Map<String, Object> pageCourseCondition(Integer current, Integer limit, CoursePublishVO coursePublishVO);

    /**
     * 删除课程信息
     * @param id
     */
    void removeCourse(String id);

    /**
     * 查询前8条热门课程
     * @return
     */
    List<EduCourse> getCourseList();

    /**
     * 根据讲师Id查询课程信息
     * @param id
     * @return
     */
    List<EduCourse> getTeacherCourseById(String id);

    /**
     * 根据id查询课程信息
     * @param id id
     * @return CourseFrontVO
     */
    CourseInitFrontVO getCourseFrontById(String id);

    /**
     * 获取所有课程信息
     * @param current
     * @param limit
     * @param courseFrontVO
     * @return
     */
    Map<String, Object> getCourseFrontList(Integer current, Integer limit, CourseFrontVO courseFrontVO);

    /**
     * 根据subjectId获取课程信息
     * @param id
     * @return
     */
    List<EduCourse> getCourseFrontBySubjectId(String id);

    /**
     * 通过id查询课程信息
     * @param id
     * @return
     */
    CourseInitFrontVO getCourseInfoById(String id);
}
